﻿using System;
using System.Security.Cryptography;
using System.Text;

namespace ExtensionTools.MD5Tools
{

    public static class MD5Helper
    {
        /// <summary>
        /// 将输入字符串进行MD5加密，并返回十六进制表示的哈希值。
        /// </summary>
        /// <param name="input">要加密的输入字符串。</param>
        /// <returns>MD5哈希值的十六进制字符串。</returns>
        public static string EncryptMD5(string input)
        {
            if (string.IsNullOrEmpty(input))
                throw new ArgumentException("输入不能为空");

            // 创建MD5实例
            using (MD5 md5 = MD5.Create())
            {
                // 将输入字符串转换为字节数组，并计算其哈希值
                byte[] inputBytes = Encoding.UTF8.GetBytes(input);
                byte[] hashBytes = md5.ComputeHash(inputBytes);

                // 将哈希值转换为十六进制字符串
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hashBytes.Length; i++)
                {
                    sb.Append(hashBytes[i].ToString("X2"));
                }
                return sb.ToString();
            }
        }

        /// <summary>
        /// 验证输入字符串的MD5哈希值是否与给定的哈希值匹配。
        /// </summary>
        /// <param name="input">要验证的输入字符串。</param>
        /// <param name="hash">预期的MD5哈希值。</param>
        /// <returns>如果匹配则返回true，否则返回false。</returns>
        public static bool VerifyMD5(string input, string hash)
        {
            if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(hash))
                throw new ArgumentException("输入或哈希值不能为空");

            string inputHash = EncryptMD5(input);
            return string.Equals(inputHash, hash, StringComparison.OrdinalIgnoreCase);
        }
    }
}
